package stack;

import java.util.Arrays;

/**
 * @author tongchen
 * @create 2022-10-18 9:00
 */
    public class MyStack {
        public static void main(String[] args) {
            java.util.Stack<Character> stack2=new java.util.Stack<>();
            MyStack myStack1 = new MyStack(5);
            // System.out.println(stack1.peek());
            myStack1.push(1);
            System.out.println(myStack1.peek());
            myStack1.push(2);
            myStack1.push(3);
            myStack1.push(4);
            myStack1.push(4);
            myStack1.push(4);
            myStack1.push(4);
            System.out.println(myStack1.peek());
//        stack1.pop();
//        stack1.pop();
//        stack1.pop();
//        stack1.pop();
//        stack1.peek();
            System.out.println(myStack1.empty());
        }
        //用数组模拟实现栈空间
        final int COUNT=5;
        int size;
        int[]stack;

        public MyStack() {
            //默认容量为5
            this.stack=new int[COUNT];
        }

        public MyStack(int length) {
            //对length的合法性进行校验
            if(length<0){
                throw new RuntimeException("输入的长度不合法");
            }
            this.stack=new int[length];
        }

        public int push(int e){
            //先判断是否需要扩容
            ensureCapacity();
            stack[size++]=e;
            return e;
        }
        public int pop(){
            //判断栈中是否存在元素
            if(size==0){
                throw new RuntimeException("栈为空，无法取出元素");
            }
            return stack[size--];
        }

        public int peek(){

            //判断栈中是否有元素
            if(empty()){
                throw new RuntimeException("栈为空，无法查看栈顶元素");
            }
            return stack[size-1];
        }
        public int size(){
            return size;
        }
        public boolean empty(){
            if(size==0){
                return  true;

            }
            return false;
        }
        //扩容操作
        private void ensureCapacity(){
            if(size>= stack.length){
                stack= Arrays.copyOf(stack,size*2);
            }
        }
    }

